/**********************************************************************
* Filename: AirNova_DatabaseDemo.java
* Created: 2013/04/28
* @author Fernando Brito e Abreu
**********************************************************************/
package org.quasar.airNova.presentationLayer;

import java.util.Arrays;
import java.util.HashSet;

import org.quasar.airNova.businessLayer.*;
import org.quasar.airNova.persistenceLayer.Database;

public abstract class AirNova_DatabaseDemo
{
	/***********************************************************
	* @param args
	***********************************************************/
	public static void main(String[] args)
	{
		demo();
	}

	private static void demo()
	{
		Database.open("database", "AirNova", "db4o");
		Database.cleanUp();
		
		System.out.println("------------------------------------------------------");
		Pais portugal = new Pais();
		portugal.setLingua("Portugues");
		portugal.setMoeda_oficial("Euro");
		portugal.setNome("Portugal");
		
		Cidade lisboa = new Cidade();
		lisboa.setNome("Lisboa");
		lisboa.setPais(portugal);
		
		Cidade porto = new Cidade();
		porto.setNome("Porto");
		porto.setPais(portugal);
		
		Database.insert(portugal, lisboa, porto);
		
		System.out.println("Portugal>" + portugal);
		System.out.println("Cidades de Portugal>" + portugal.cidades());
				
		Individual ramon = new Individual();
		ramon.setNome("Ramon Bolivar");
				
		Individual julio = new Individual();	
		julio.setNome("Julio Iglesias");
		
		Pais espanha = new Pais(new HashSet<Individual>(Arrays.asList(ramon, julio)), 1, "castelhano", "Euro", "Espanha");
				
		Cidade madrid = new Cidade();
		madrid.setNome("Madrid");

		Cidade olivenza = new Cidade();
		olivenza.setNome("Olivenza");

		Database.insert(ramon, julio, espanha, madrid, olivenza);

		System.out.println("Pais de Olivenza>" + olivenza.pais());
		olivenza.setPais(espanha);
		System.out.println("Pais de Olivenza>" + olivenza.pais());

		System.out.println("Espanha>" + espanha);
		
		System.out.println("------------------------------------------------------");

		Individual letizia = new Individual(123, "Palacio Almodovar, Calle Colon, 33, 23456 Madrid, Espa?a", 898798792, "Letizia Gonzalez", "letizia@palaciorey.es", 56565656, Sexo.feminino, 987654321);
		espanha.addNacionais(letizia);
		
		Database.insert(letizia);
		Database.update(espanha);
		
		System.out.println("Nacionais de Espanha:");
		for (Individual quien: espanha.nacionais())
			System.out.println(quien);
		
		System.out.println("------------------------------------------------------");
		
		for (Cidade c: Cidade.allInstances())
			System.out.println(c);
		
		System.out.println("------------------------------------------------------");
		
		Database.delete(madrid, porto);
		for (Cidade c: Cidade.allInstances())
			System.out.println(c);
		
		System.out.println("------------------------------------------------------");
		
		olivenza.setPais(portugal);
		olivenza.setNome("Olivenza");
		System.out.println(olivenza);
		
		Database.update(olivenza);
		
		System.out.println("------------------------------------------------------");

		System.out.println("Olivenza ? de novo uma cidade de " + olivenza.pais().nome());
		
		for (Cidade c: Cidade.allInstances())
			System.out.println(c);

		System.out.println("------------------------------------------------------");

		for (Pais p: Pais.allInstances())
				System.out.println(p);
		
		System.out.println("------------------------------------------------------");
		
		for (Pais p: Pais.allInstances())
		{
			System.out.println(p);
			for (Individual i: p.nacionais())
				System.out.println(i);
		}
		
		System.out.println("------------------------------------------------------");
		
		for (Individual i: Individual.allInstances())
			System.out.println(i.nacionalidade());
		
		System.out.println("------------------------------------------------------");

		CalendarDate today= new CalendarDate(30, 5,null, 2013);
		CartaoCredito cartaoJ = new CartaoCredito(julio, new CalendarDate(23, 5, today, 2016), 123456789);
		
		System.out.println(cartaoJ);
		
		System.out.println("------------------------------------------------------");
		
		Aviao airbus33 = new Aviao("AirBus A312", "Aguia");
		Classe business = new Classe(TipoClasse.negocio);
		Classe normal = new Classe(TipoClasse.turistica);
		Capacidade airbus33_business = new Capacidade(airbus33, business, 1, 20);
		Capacidade airbus33_normal = new Capacidade(airbus33, normal, 21, 120);
		
		Database.insert(airbus33, business, normal, airbus33_business, airbus33_normal);
		
		for (Capacidade c: airbus33.capacidade())
			System.out.println(c);

		System.out.println("------------------------------------------------------");
		
		Voo v1 = new Voo();
		Realizacao r1a = new Realizacao(v1, new CalendarDate(12, 6,today, 2013));
		Realizacao r1b = new Realizacao(v1, new CalendarDate(19, 6,today, 2013));
		Realizacao r1c = new Realizacao(v1, new CalendarDate(26, 6,today, 2013));

		r1a.setAviao(airbus33);
		r1b.setAviao(airbus33);
		r1c.setAviao(airbus33);
		
		Database.insert(r1a, r1b, r1c);
		
		for (Realizacao r: Realizacao.allInstances())
			System.out.println(r);
		
		Database.close();
	}
}